package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


import vista.VentanaListadoProductos;
import vista.VentanaListadoProyectos;
import vista.VentanaProducto;
import vista.VentanaProyecto;
import modelo.Laboratorio;
import modelo.Producto;
import modelo.Proyecto;

public class ControladorProducto implements ActionListener, MouseListener  {
	
	
	private Proyecto proyecto;
	private Laboratorio laboratorio;
	private VentanaProducto ventanaprod;
	private VentanaProyecto ventanaproy;
	private int fila=0;
	private int filapro=0;
	


public ControladorProducto(Proyecto proyecto, Laboratorio laboratorio){
	
	this.proyecto = proyecto;	
	this.laboratorio = laboratorio;
	ventanaprod = new VentanaProducto();
	ventanaprod.setLocationRelativeTo(null);
	ventanaprod.setVisible(true);
	ventanaprod.agregarListener(this);
	ventanaprod.agregarMouseListener(this);
	
	ventanaprod.getBotonEliminar().setEnabled(false);
	generarCodigoProducto();
	llenarListadoProyectosProductos();
	
	
	
}

public void actionPerformed(ActionEvent e) {
	if(e.getActionCommand().equalsIgnoreCase("Guardar")){
		if (ventanaprod.getNombre().equalsIgnoreCase("")|| ventanaprod.getTipoProducto().equalsIgnoreCase("")||
			ventanaprod.getProducto().equalsIgnoreCase("")){
			
			ventanaprod.mostrarMensaje(" No puede guardar un Producto con campos vacios");
		}
		else{
			guardarProducto();
			ventanaprod.blanquearCampos();}
			
	}// fin del guardar
	
			
	else if (e.getActionCommand().equalsIgnoreCase("Cancelar")){
		ventanaprod.blanquearCampos();
		ventanaprod.getBotonGuardar().setEnabled(true);
		ventanaprod.getBotonEliminar().setEnabled(false);
		
		//ventanaprod.limpiartabla();
		//generarCodigoProducto();
	}
	
	else if (e.getActionCommand().equalsIgnoreCase("Eliminar")){
		eliminarProducto();
		ventanaprod.getBotonGuardar().setEnabled(true);
		ventanaprod.blanquearCampos();
	}
	}// fin de action performance



//********************************************************* METODOS COMPLEJOS*******************************************************
public void generarCodigoProducto(){
//	int pos = laboratorio.buscarProyecto(ventanaprod.getCodigoProyecto());
//	int valor =laboratorio.getProyecto(pos).getResultados().size();
	String cod= java.util.UUID.randomUUID().toString();
	String nuevocodigo = cod.substring(0, 5);
	//String cod = "PROD-" + String.valueOf(valor + 1);
	ventanaprod.setCodigo(nuevocodigo);
}

public void guardarProducto(){
	
	String prueba = ventanaprod.getCodigoProyecto();
	int i = laboratorio.buscarProyecto(prueba);
	Proyecto proy = laboratorio.getProyecto(i);
	
	Producto producto = new Producto (ventanaprod.getCodigoProyecto(),ventanaprod.getCodigo(),ventanaprod.getTipoProducto(), ventanaprod.getNombre(), ventanaprod.getProducto(),"A");
	ventanaprod.mostrarMensaje(producto.getTipoproducto() +" se ha guardado exitosamente.");

	
	proy.agregarResultado(producto);
	laboratorio.setProyecto(i, proy);
	generarCodigoProducto();
	}



public void modificarProducto(){
	
	String produc = ventanaprod.getCodigoProyecto();
	int i = laboratorio.buscarProyecto(produc);
	Proyecto proy = laboratorio.getProyecto(i);
	
	Producto producto = new Producto (proyecto.getCodigo(),ventanaprod.getCodigo(),ventanaprod.getTipoProducto(), ventanaprod.getNombre(), ventanaprod.getProducto(),"A");
	proy.setResultado(i, producto);
	ventanaprod.mostrarMensaje(producto.getTipoproducto() +"modificado con exito");
	this.generarCodigoProducto();
}

public void eliminarProducto(){
	
	Producto producto = new Producto (proyecto.getCodigo(),ventanaprod.getCodigo(),ventanaprod.getTipoProducto(), ventanaprod.getNombre(), ventanaprod.getProducto(),"A");
	proyecto.setResultado(fila, producto);
	ventanaprod.mostrarMensaje(producto.getTipoproducto() +"modificado con exito");
	this.generarCodigoProducto();
}


public void llenarListadoProyectosProductos(){
	
	if(laboratorio.Proyectos().size()!=0)
	{
		ventanaprod.getTablaProyectos().setVisible(true);
		ventanaprod.setListadoProyectos(new VentanaListadoProyectos(laboratorio.Proyectos()));
	}
	else 
		{ventanaprod.mostrarMensaje("No hay proyectos Registrados");
		ventanaprod.getBotonGuardar().setEnabled(false);}
	limpiarTabla();
}

public void mouseClicked(MouseEvent me)
{
	fila = ventanaprod.getTablaProyectos().getSelectedRow(); 
	ventanaprod.setCodigoProyecto(laboratorio.Proyectos().get(fila).getCodigo());
	ventanaprod.getBotonGuardar().setEnabled(true);
	llenarListadoProductos();
	
	
	}

//Listado de Productos por Proyectos
public void llenarListadoProductos(){
	
	int j= laboratorio.buscarProyecto(ventanaprod.getCodigoProyecto());
	
	if(laboratorio.Proyectos().get(j).getResultados().size()!=0)
	{
		ventanaprod.getTablaProyectos().setVisible(true);
		ventanaprod.setListadoProductos(new VentanaListadoProductos(laboratorio.Proyectos().get(j).getResultados()));
	}
	else 
		ventanaprod.mostrarMensaje("No hay productos Registrados");
		
	}


public void limpiarTabla(){
	TableModel jTable1Model = new DefaultTableModel();
}

@Override
public void mouseEntered(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mouseExited(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mousePressed(MouseEvent e) {
	
	
}
@Override
public void mouseReleased(MouseEvent e) {
	// TODO Auto-generated method stub
	
}



}